Repository navigation
Security review: fix critical bridge bugs, add withdrawal path, remove ethers/ring - #10
Merged
Merged
Conversation
…r, remove ethers/ring, update SDK and docs
ishaanman7898
force-pushed
the
security-review-fixes
branch
from
November 14, 2026 06:49
c6ae84d to
577b30f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Security review of the whole repo, with fixes. Full findings, severity and status:
docs/SECURITY_REVIEW.md.Not fixed, and the reason this is still not safe for real funds: the Groth16 circuit proves only a commitment relation. It does not verify source-chain consensus or receipt inclusion, so whoever holds the proving key can attest any message (finding C1). That needs a light-client circuit / zkVM program and a multi-party setup. The contracts now hash a canonical message designed to be that circuit's public output.
Critical fixes
releaseTokens, capped bytotalLocked.contracts/solana/src, whose verifier was forgeable.Also fixed (high/medium)
export-vk.finalizedtag and re-checks the receipt.bytes32, and amounts are decimal-scaled into u64.burn_for_withdrawal, relayer hub → EVM delivery via EIP-1559, andclaim_swap_as_wrapped. NFT locking is disabled until a destination supports NFTs.API_TOKEN.interlink-corerelayer deleted, soring0.16 (RUSTSEC-2025-0009/0010) is gone.ChainId.Solanais now 2 (was 900, which mismatched the contracts).Breaking changes
New account layouts and instructions on the hub, a new EVM ABI/event, and new Cosmos messages. Everything needs redeploying, and the VK must be regenerated with
cargo run --bin export-vk.Still open
reserve_ais virtual.mainbeyond the ethers chain should be re-checked after merge.Test plan
main: newer rustc no longer passes--allow-undefinedto the wasm linker, which cosmwasm-std 1.5 relies on. Fixed with a crate-local cargo config; Stages 6–7 now run on CI toocargo test --workspace: relayer lib 445, integration 19, security 32, checklist 9, circuits 10, interlink-core 5;clippy -D warningsandfmt --checkcleantscclean, coverage above thresholdsvia_ir); the compiled gateway was run in revm with real proofs (release, tamper, replay, custody guards) and with the relayer's own prover and calldataforge test(Foundry not available in the review environment)anchor testand an SBF build with on-chain CU measurement🤖 Generated with Claude Code